package com.shlh.saas.util;

import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 文件上传工具类
 */
public class FileUploadUtils {

    /**
     * 上传文件到指定目录
     * @param file 文件
     * @param basePath 基础路径
     * @return 文件路径
     * @throws IOException IO异常
     */
    public static String uploadFile(MultipartFile file, String basePath) throws IOException {
        // 创建目录
        File directory = new File(basePath);
        if (!directory.exists()) {
            directory.mkdirs();
        }

        // 生成子目录（按年月日）
        String subDir = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        File dateDirectory = new File(basePath + File.separator + subDir);
        if (!dateDirectory.exists()) {
            dateDirectory.mkdirs();
        }
        
        // 生成随机文件名
        String originalFilename = file.getOriginalFilename();
        String extension = getFileExtension(originalFilename);
        String newFileName = UUID.randomUUID().toString().replace("-", "") + extension;
        
        // 文件保存路径
        Path filePath = Paths.get(dateDirectory.getPath(), newFileName);
        
        // 保存文件
        Files.write(filePath, file.getBytes());
        
        // 返回相对路径
        return subDir + File.separator + newFileName;
    }
    
    /**
     * 上传多个文件到指定目录
     * @param files 文件列表
     * @param basePath 基础路径
     * @return 文件路径列表
     * @throws IOException IO异常
     */
    public static List<String> uploadFiles(List<MultipartFile> files, String basePath) throws IOException {
        List<String> paths = new ArrayList<>();
        if (files != null && !files.isEmpty()) {
            for (MultipartFile file : files) {
                if (file != null && !file.isEmpty()) {
                    String path = uploadFile(file, basePath);
                    paths.add(path);
                }
            }
        }
        return paths;
    }
    
    /**
     * 获取文件扩展名
     * @param filename 文件名
     * @return 扩展名
     */
    public static String getFileExtension(String filename) {
        if (filename == null || filename.isEmpty() || !filename.contains(".")) {
            return "";
        }
        return filename.substring(filename.lastIndexOf("."));
    }
    
    /**
     * 获取完整文件路径
     * @param relativePath 相对路径
     * @param basePath 基础路径
     * @return 完整路径
     */
    public static String getFullFilePath(String relativePath, String basePath) {
        return basePath + File.separator + relativePath;
    }
} 